package com.bjpowernode.boss.convert;

import com.bjpowernode.boss.domain.UserInfo;
import com.bjpowernode.boss.enums.buz.PublicStatus;
import com.bjpowernode.boss.mvc.model.query.UserInfoQuery;
import com.bjpowernode.boss.mvc.model.vo.LoadUserInfoEditVo;
import com.bjpowernode.boss.mvc.model.vo.MatchUserInfoVo;
import com.bjpowernode.boss.mvc.model.vo.UserInfoVo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;

import java.util.List;

/**
 * 用户信息 格式转换接口口
 */
@Mapper(componentModel = "spring")
public interface UserInfoConvert {

    /**
     * list<Userinfo> --> List<UserInfoVo>
     * @param userInfoList
     * @return
     */
    List<UserInfoVo> toConvertUserInfoVoList(List<UserInfo> userInfoList);

    /**
     * userinfo --->  userinfoVo
     * @param userInfo
     * @return
     */
    @Mappings({
            @Mapping(source = "createTime" , target = "createTime" , dateFormat = "yyyy-MM-dd HH:mm:ss"),
            @Mapping(source = "status" , target = "status" , qualifiedByName = "handleStatusConvert")
    })
    UserInfoVo toConvertUserInfoVo(UserInfo userInfo);

    @Named("handleStatusConvert")
    default String handleStatusConvert(String status) {
        // 定义一个新的status  --> 启用
        String newStatus = PublicStatus.ENABLE.getMsg();
        // 判断 ENABLE
        if (!PublicStatus.ENABLE.name().equals(status)){
            // 不相等 ,
            newStatus = PublicStatus.DISABLE.getMsg();
        }
        // 返回的是 启用 | 禁用
        return newStatus;
    }

    /**
     * userInfo ----->  loadUserInfoEditVo
     * @param userInfo
     * @return
     */
    LoadUserInfoEditVo toConvertLoadUserInfoEditVo(UserInfo userInfo);

    /**
     * userInfoQuery ------>  userInfo
     * @param userInfoQuery
     * @return
     */
    UserInfo toConvertUserInfo(UserInfoQuery userInfoQuery);

    // list<userinfo>  ----> list<matchUserinfoVo>
    List<MatchUserInfoVo> toConvertmuivList(List<UserInfo> userInfoList);

    // userinfo --->  matchuserinfovo
    MatchUserInfoVo toConvertmuiv(UserInfo userInfo);

}
